/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
* Realiza una petición via ajax (async).
* @param {String} xRuta: archivo que recibe los parametros pasados en str_param. Devuelve código html
* @param {String} xIdElemento: identificador del elemento donde se desplegarán los datos que arroje arch_busqueda
* @param {String} xParametros: es una string con los parametros y valores que se le va a pasar por POST al arch_busqueda
* @returns {String} cadena html respuesta de la petición
*/
function cargaAjax(xRuta, xIdElemento, xParametros)
{
    try
    {
        elemento = document.getElementById(xIdElemento);
        if(elemento!=null)
        {
            $.ajax(
            {
                type: "POST",
                async: false,
                url: xRuta,
                data: xParametros,
                contentType: "application/x-www-form-urlencoded",
                dataType: "html",
                beforeSend: function()
                {
//                    elemento.innerHTML = "<i class=\"fa fa-spinner fa-spin\"></i>";
                    elemento.innerHTML = "<img width=\"20\" heigth=\"20\" src=\"assets/img/loading.gif\">";
                },
                success: function(datos)
                {
                    $('#recarga').attr('innerHTML','');
                    elemento.innerHTML = datos;
                    buscarScripts(datos);
                },
                error: function(obj, textStatus, excep)
                {
                    if(obj.status==404)
                    {
                        showMensaje('Error Recarga - Status ' + obj.status + ': La direccion no existe.', 'error');
                    }
                    else
                    {
                        showMensaje('Error Recarga - Status ' + obj.status + ': ' + textStatus + ' ' + excep + '.', 'error');
                    }
                }
            });
        }
    }
    catch(e)
    {
        showMensaje(e, 'error');
    }
}

function cargaAjaxLoader(xRuta, xIdElemento, xParametros)
{
    try
    {
        elemento = document.getElementById(xIdElemento);
        if(elemento!=null)
        {
            $.ajax(
            {
                type: "POST",
                async: false,
                url: xRuta,
                data: xParametros,
                contentType: "application/x-www-form-urlencoded",
                dataType: "html",
                beforeSend: function()
                {
                    $('#preloader').delay(150).show();
                },
                success: function(datos)
                {
                    $('#recarga').attr('innerHTML','');
                    elemento.innerHTML = datos;
                    $('#preloader').delay(150).hide();
                    buscarScripts(datos);
                },
                error: function(obj, textStatus, excep)
                {
                    $('#preloader').delay(150).hide();
                    if(obj.status==404)
                    {
                        showMensaje('Error Recarga - Status ' + obj.status + ': La direccion no existe.', 'error');
                    }
                    else
                    {
                        showMensaje('Error Recarga - Status ' + obj.status + ': ' + textStatus + ' ' + excep + '.', 'error');
                    }
                }
            });
        }
    }
    catch(e)
    {
        showMensaje(e, 'error');
    }
}

/**
* Permite que se ejecuten los scripts llamados vía AJAX, pero los scripts deben estar con el siguiente formato <script>...código...</script>.
* @param {String} scripts: cadena con html y javascript incrustado
*/
function buscarScripts(scripts)
{
    while (scripts.indexOf("<script>")!=-1)
    {
        restohtml= scripts.substring(scripts.indexOf("/script")+7, scripts.length);
        scripts= scripts.substring(scripts.indexOf("<script>")+8, scripts.indexOf("/script")-1);
        eval(scripts);
        scripts= restohtml;
    }
}

/**
* Devulve todos los parametros del formulario para ser enviados
* @param {}
* @returns {String}  cadenaFormulario parametros del formulario
*/
function getParams()
{
    var results = jQuery(document.getElementById('formulario')).serialize();
    results = decodeURI(results);

    return results;
}

function showMensaje(xMensaje, xTipo)
{    
    var texto = '';
    var estilo = '';
    var timeShow = 0;
    
    //Mostrar mensajes
    if(xTipo == "exito")
    {
        estilo = 'growl-success';
        timeShow = 2800;
        texto = '<strong>Correcto!</strong> ';
    }
    else if(xTipo == "info")
    {
        estilo = 'growl-info';
        timeShow = 4000;
        texto = '<strong>Info!</strong> ';
    }
    else if(xTipo == "alerta")
    {
        estilo = 'growl-warning';
        timeShow = 4100;
        texto = '<strong>Alerta!</strong> ';
    }
    else if(xTipo == "error")
    {
        estilo = 'growl-danger';
        timeShow = 5000;
        texto = '<strong>Error!</strong> ';
    }
       
    jQuery.gritter.add({
        title: texto,
        text: xMensaje,
        class_name: estilo,
        image: 'images/mensajes/'+xTipo+'.png',
        sticky: false,
        time: timeShow
     });
}

function fGetNumUnico()
{
    var Dia = new Date();
    var d = Dia.getDay();
    var n = Dia.getMonth();
    var a = Dia.getFullYear();
    var m = Dia.getMinutes();
    var h = Dia.getHours();
    var s = Dia.getSeconds();
    var Num = "" + a + n + d + h + m + s;

    return parseInt(Num);
}

function porcentaje(porcentaje, precio)
{
   var total = Math.floor(parseFloat(porcentaje) * parseFloat(precio))/100;
   return parseFloat(total).toFixed(2);
}

function allCheck(xTableID, xChecked)
{
    try
    {
        var tbody = document.getElementById(xTableID).getElementsByTagName("tbody")[0];
        var rowCount = tbody.rows.length;
        var id = '';
        
        for(var i=0; i<rowCount; i++)
        {
            id = tbody.rows[i].getAttribute('id');  
            
            if(!$('#checkbox_'+id).attr('disabled'))
            {
                $('#checkbox_'+id).attr('checked',xChecked);
            }
        }
    }
    catch(e)
    {
        showMensaje(e, 'error');
    }
}

function limpiaTabla(xTableID)
{
    try
    {
        var tabla = document.getElementById(xTableID);

        if(tabla != null)
        {
            var tbody = document.getElementById(xTableID).getElementsByTagName("tbody")[0];
            var cantidad = tbody.rows.length
            for(var i=0;i< cantidad;i++)
            {
                tbody.deleteRow(0);//tbody.deleteRow (siempre la primera);
            }
        }
    }
    catch(e)
    {
        showMensaje(e, 'error');
    }
}

/**
* Funcion generica para validar fecha.
* @param {String} contenedor: nombre del input text
*/
function validaFecha(fecha)
{
    var dia=0;
    var mes=0;
    var anio=0;
    if(fecha.length == 10)
    {
        dia=fecha.substring(0, 2);
        mes=fecha.substring(3, 5);
        anio=fecha.substring(6, 10);

        if(parseInt(dia) > 31 || parseInt(mes) > 12 || parseInt(anio)<1800 || parseInt(anio)>2160)
        {
           return true;
        }

        switch(parseInt(mes))
        {
            case 2:
                if(anio%4!=0)
                {
                    if(parseInt(dia) > 28)
                    {
                        return true;
                    }
                }
                else
                {
                    if(parseInt(dia) > 29)
                    {
                        return true;
                    }
                }
                break;
            case 4,6,9,11:
                if(parseInt(dia) > 30)
                {
                    return true;
                }
                break;
        }
        return false;
    }
    else if (fecha.length == 7)
    {
        mes=fecha.substring(0, 2);
        anio=fecha.substring(3, 7);
        if(parseInt(mes) > 12 || parseInt(anio)<1800 || parseInt(anio)>2160)
        {
           return true;
        }
    }
    else if (fecha.length == 4)
    {
        if(parseInt(fecha)<1800 || parseInt(fecha)>2160)
        {
           return true;
        }
    }
    return false;
}

/**
* Funcion generica para validar fecha.
* @param {String} contenedor: nombre del input text
*/
function validaHora(xHora)
{
    var hora=xHora.substring(0, 2);
    var minuto=xHora.substring(3, 5);

    if(parseInt(hora) > 24 || parseInt(minuto) > 59)
    {
       return true;
    }
    else
    {
       return false;
    }
}

/**
 * Compara dos fechas con formato dd/MM/yyyy - MM/yyyy - yyyy
 * @param {String} xFechaMenor: fecha menor a comparar
 * @param {String} xFechaMayor: fecha mayor a comparar
 * Retorna: -> true si la xFechaMenor > xFechaMayor [CASO INCORRECTO]
 * Retorna: -> false si la xFechaMenor <= xFechaMayor [CASO CORRECTO]
 */
function compararFechas(xFechaMenor, xFechaMayor)
{
    var xDia=0;
    var xMes=0;
    var xAnio=0;
    var yDia=0;
    var yMes=0;
    var yAnio=0;

    //FECHAS FORMATO dd/MM/yyyy
    if (xFechaMenor.length == 10 && xFechaMayor.length == 10)
    {
        xDia=xFechaMenor.substring(0, 2);
        xMes=xFechaMenor.substring(3, 5);
        xAnio=xFechaMenor.substring(6,10);
        yDia=xFechaMayor.substring(0, 2);
        yMes=xFechaMayor.substring(3, 5);
        yAnio=xFechaMayor.substring(6,10);

        if (xAnio > yAnio)
        {
            return true;
        }
        else
        {
            if (xAnio == yAnio)
            {
                if (xMes > yMes)
                {
                    return true;
                }
                else
                {
                    if (xMes == yMes)
                    {
                        if (xDia > yDia)
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }
    }
    //FECHAS FORMATO MM/yyyy
    else if (xFechaMenor.length == 7 && xFechaMayor.length == 7)
    {
        xMes=xFechaMenor.substring(0, 2);
        xAnio=xFechaMenor.substring(3,7);
        yMes=xFechaMayor.substring(0, 2);
        yAnio=xFechaMayor.substring(3, 7);
        if (xAnio > yAnio)
        {
            return true;
        }
        else
        {
          if (xAnio == yAnio)
          {
                if (xMes > yMes)
                {
                    return true;
                }
                else{return false;}
          }
          else{return false;}
        return false;
        }
    }
    //FECHAS FORMATO yyyy
    else if (xFechaMenor.length == 4 && xFechaMayor.length == 4)
    {
        xAnio = xFechaMenor.substring(0, 4);
        yAnio = xFechaMayor.substring(0, 4);
        if (xAnio > yAnio)
        {
            return true;
        }
        else{return false;}
    }
    //Salida IF Length
    else{return false;}
}

/**
 * Calcula la diferencia entre dos fechas con formato dd/MM/yyyy - MM/yyyy - yyyy
 * @param {String} xFecha1: fecha 1
 * @param {String} xFecha2: fecha 2
 * Retorna: -> la diferencia en dias
 */
function diferenciaEntreFechas(xFecha1, xFecha2)
{
    var xDia1=0;
    var xMes1=0;
    var xAnio1=0;
    var xDia2=0;
    var xMes2=0;
    var xAnio2=0;
    var fecha1;
    var fecha2;

    xDia1=xFecha1.substring(0, 2);
    xMes1=xFecha1.substring(3, 5);
    xAnio1=xFecha1.substring(6,10);
    xDia2=xFecha2.substring(0, 2);
    xMes2=xFecha2.substring(3, 5);
    xAnio2=xFecha2.substring(6,10);
    fecha1=new Date(xAnio1,xMes1-1,xDia1);
    fecha2=new Date(xAnio2,xMes2-1,xDia2);
    
    var diferenciaDias=(fecha2-fecha1)/1000/3600/24;
    return diferenciaDias;
}

function identificadorTipo(object)
{
    if(object instanceof Array) 
    { 
        return 'array';
    }
    else if(object instanceof Object) 
    { 
        return 'object';
    }
}

function objetToString(objeto)
{
    var str = toSource(objeto);
    str = "({" + str.substring(0, str.length-2) + "})";   
    return str;
}

function toSource(objeto)
{
    var output = '';
    
    for (var property in objeto) 
    {       
        if(identificadorTipo(objeto[property]) === 'array')
        {
            output += '\'' + property + '\':[{' + toSourceArray(objeto[property]) + '}], ';
        }
        else if(identificadorTipo(objeto[property]) === 'object')
        {
            output += '\'' + property + '\':"' + toSource(objeto[property]) + '", ';
        }
        else
        {
            output += '\'' + property + '\':"' + objeto[property] + '", ';
        }
    }
    
    return output;
}

function toSourceArray(array)
{
    var output = '';
    var str = '';
    
    for (var x=0; x<array.length; x++)
    {
        str = '';
        
        if(identificadorTipo(array[x]) === 'object')
        {
            str = toSource(array[x]);
            str = str.substring(0, str.length-2);             
            output += str;
            
            if(x!==(array.length-1))
            {
                output += "}, {";
            }
        }
        else
        {
            output += array[x];
            
            if(x!==(array.length-1))
            {
                output += ', ';
            }
            
            alert(output);
        }
    }
    
    return output;
}

function format(num)
{
    if(!isNaN(num)){
        num = num.toString().split('').reverse().join('').replace(/(?=\d*\,?)(\d{3})/g,'$1,');
        num = num.split('').reverse().join('').replace(/^[\,]/,'');
    }
    return num;
}